Passed
Pull Request — master (#13)
by Luís
01:07
created

RestInterface.js ➔ ???   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1.6296

Importance

Changes 9
Bugs 4 Features 5
Metric Value
c 9
b 4
f 5
nc 1
nop 3
dl 0
loc 10
ccs 1
cts 7
cp 0.1429
cc 1
crap 1.6296
rs 9.4285
1 14
import App from "app";
2
const _ = App.libs._;
3
4
class RestInterface {
5
    /**
6
     * @param {String} serviceName   name of the service (used to emmit events)
7
     * @param {String} basepath
8
     * @todo add cache config
9
     */
10 4
    constructor(serviceName, basepath, idField = "id") {
11
        this.serviceName = serviceName;
12
        this.basepath = basepath;
13
        this.idField = idField;
14
15
        this.Request = App.ServicesContainer.get("AJAX");
16
        this.EM = App.EventManager;
17
18
        this.collection = [];
19
    }
20
21
    /**
22
     * Get all itens
23
     * @method index
24
     * @param  {Object} data querystring
25
     * @return {Promise}
26
     */
27
    index(data) {
28
        return new Promise((resolve, reject) => {
29
            this.Request.send("get", this.basepath, data, (res) => {
30
                resolve(res.body);
31
            }, (err, res) => {
32
                reject(err, res);
33
            });
34
        });
35
    }
36
37
    /**
38
     * Fetch single item
39
     * @param {String|Number} id
40
     * @return {Promise}
41
     */
42
    show(id) {
43
        return new Promise((resolve, reject) => {
44
            this.Request.send("get", `${this.basepath}/${id}`, {}, (res) => {
45
                resolve(res.body);
46
            }, (err, res) => {
47
                reject({err, res});
48
            });
49
        });
50
    }
51
52
    /**
53
     * Create a new item
54
     * @param {Object}   data
55
     * @return {Promise}
56
     */
57
    store(data) {
58
        return new Promise((resolve, reject) => {
59
            this.Request.send(
60
                "post",
61
                this.basepath,
62
                data,
63
                (res, req) => {
64
                    this.EM.notify(this.serviceName + ".create", res, req);
65
                    resolve(res.body);
66
                },
67
                (err, res, req) => {
68
                    this.EM.notify(this.serviceName + ".create.error", err, res, req);
69
                    reject({err, res, req});
70
                }
71
            );
72
        });
73
    }
74
75
    /**
76
     * @param {Object}   data
77
     * @return {Promise}
78
     */
79
    update(data) {
80
        let id = null;
81
82 2
        if (data.hasOwnProperty(this.idField)) {
83
            id = data[this.idField];
84
        } else {
85
            id = this._extractId(data);
86
        }
87
88
        let payload = data;
89
        payload._method = "PUT";
90
91
92
        return new Promise((resolve, reject) => {
93
            this.Request.send(
94
                "post",
95
                this.basepath + "/" + id,
96
                payload,
97
                (res, req) => {
98
                    this.EM.notify(this.serviceName + ".update", res, req);
99
                    resolve(res.body);
100
                },
101
                (err, res, req) => {
102
                    this.EM.notify(this.serviceName + ".update.error", err, res, req);
103
                    reject({err, res, req});
104
                }
105
            );
106
        });
107
    }
108
109
    /**
110
     * @param {Object}   data
111
     * @return {Promise}
112
     */
113
    destroy(data) {
114
        let id = null;
115 2
        if (data.hasOwnProperty(this.idField)) {
116
            id = data[this.idField];
117
        } else {
118
            id = this._extractId(data);
119
        }
120
121
        let payload = data;
122
        payload._method = "DELETE";
123
124
        return new Promise((resolve, reject) => {
125
            this.Request.send(
126
                "post",
127
                this.basepath + "/" + id,
128
                payload,
129
                (res, req) => {
130
                    this.EM.notify(this.serviceName + ".destroy", res, req);
131
                    resolve(res);
132
                },
133
                (err, res, req) => {
134
                    this.EM.notify(this.serviceName + ".destroy.error", err, res, req);
135
                    reject({err, res, req});
136
                }
137
            );
138
        });
139
    }
140
}
141
142
export default RestInterface;
143